package frsf.cidisi.exercise.laberinto.situationCalculus;

import frsf.cidisi.exercise.laberinto.situationCalculus.util.Celda;
import frsf.cidisi.faia.agent.Action;
import frsf.cidisi.faia.environment.Environment;


public class Laberinto extends Environment {

    public Laberinto() {
        this.environmentState = new EstadoLaberinto();
    }

    @Override
    public EstadoLaberinto getEnvironmentState() {
        return (EstadoLaberinto) super.getEnvironmentState();
    }

    @Override
    public AgenteLaberintoPerception getPercept() {
        AgenteLaberintoPerception p = new AgenteLaberintoPerception();
        EstadoLaberinto e = this.getEnvironmentState();

        if(e.getPosicion() == null) {
        	e.setPosicion(e.getEntorno().getEntradaAleatoria());
        }
        
        // Get the actual position of the agent
        int row = e.getPosicion().getX();
        int col = e.getPosicion().getY();
        Celda paredes = e.getEntorno().getCelda(row, col);
        
        // Set the sensors
        p.setsensor_norte(paredes.getEstado(Celda.getNorte()));
        p.setsensor_este(paredes.getEstado(Celda.getEste()));
        p.setsensor_sur(paredes.getEstado(Celda.getSur()));
        p.setsensor_oeste(paredes.getEstado(Celda.getOeste()));

        p.setposicion_x(row);
        p.setposicion_y(col);
        
        if(e.getEntorno().getLlaves().contains(e.getPosicion()))
        	p.setSensor_objeto(AgenteLaberintoPerception.LLAVE);
        
        if(e.getEntorno().getSalidas().contains(e.getPosicion()))
        	p.setSensor_objeto(AgenteLaberintoPerception.SALIDA);
        
        if(e.getEntorno().getCerrojos().contains(e.getPosicion()))
        	p.setSensor_objeto(AgenteLaberintoPerception.CERROJO);
        
        return p;
    }
      
    @Override
    public String toString() {
        return this.environmentState.toString();
    }
    
    @Override
    public boolean agentFailed(Action action) {
        return action == null;
    }
}
